﻿flags =  -O0 -g3 -Wall -Wextra -pedantic -c -fmessage-length=0 -MMD -MP
#Rutas
URI_ENT = CapadeAplicacion/entidades/
URI_UTIL = CapaLogica/Utilitarios/
URI_ARBOL = CapaLogica/Arbol/
URI_COMUN = CapaLogica/Comunes/
URI_HASH = CapaLogica/HashExtensible/

#Capa de Aplicacion
SISTEMA = CapadeAplicacion/Sistema
CATEGORIA = $(URI_ENT)Categoria
CONSULTA = $(URI_ENT)Consulta
COTIZACION = $(URI_ENT)Cotizacion
SERVICIO = $(URI_ENT)Servicio
USUARIO = $(URI_ENT)Usuario

#Capa de Fisica
ARCHIVODEBLOQUES = CapaFisica/ArchivoDeBloques
BLOCKEDFILE = CapaFisica/BlockedFile
BLOQUE = CapaFisica/Bloque
LISTAENLAZADA = CapaFisica/ListaEnlazada
REGISTRO = CapaFisica/Registro

#Arbol
ARBOLBMAS = $(URI_ARBOL)ArbolBMas
COMPARADORCLAVESCONTEXTO = $(URI_ARBOL)ComparadorClavesContexto
CONSTANTESARBOL = $(URI_ARBOL)CONSTANTES
ITERADORARBOLBMAS = $(URI_ARBOL)IteradorArbolBMas
NODO = $(URI_ARBOL)Nodo
NODOHOJA = $(URI_ARBOL)NodoHoja
NODOINTERIOR = $(URI_ARBOL)NodoInterior
RESULTADO = $(URI_ARBOL)Resultado
CADENABYTES = $(URI_COMUN)CadenaBytes
CLAVE = $(URI_COMUN)Clave
CONSTANTESCOMUNES = $(URI_COMUN)Constantes
GESTORBLOQUESLIBRES = $(URI_COMUN)GestorBloquesLibres
PARSER = $(URI_COMUN)Parser
PERSISTOR = $(URI_COMUN)Persistor
REGISTROARBOL = $(URI_COMUN)RegistroArbol
SERIALIZABLE = $(URI_COMUN)Serializable

#Hash
HASHMANAGER = $(URI_HASH)HashManager
HASHTABLE = $(URI_HASH)HashTable

LISTA_INV = CapaLogica/ListaInvertida/ListaInvertida

UTILITARIOS = $(URI_UTIL)Utilitarios

CARGAR_ARCHIVO = CargaMasiva/Cargar_Archivo

#Menu
FORMULARIO = Menu/Formulario
MENU = Menu/Menu
MENUES = Menu/menues

#Encriptador
ENCRIPTADOR = Encriptacion/Encriptador
MATRIZ = Encriptacion/Matriz
MD5 = Encriptacion/Md5

OBJECTS = Sistema.o Usuario.o Servicio.o Consulta.o Categoria.o Cotizacion.o
OBJECTS += BlockedFile.o Bloque.o ArchivoDeBloques.o Registro.o ListaEnlazada.o
OBJECTS += ArbolBMas.o CadenaBytes.o Clave.o RegistroArbol.o ComparadorClavesContexto.o
OBJECTS += IteradorArbolBMas.o Nodo.o NodoHoja.o NodoInterior.o Persistor.o Resultado.o
OBJECTS += HashManager.o HashTable.o ListaInvertida.o Utilitarios.o
OBJECTS += menues.o Menu.o Formulario.o Cargar_Archivo.o
OBJECTS += Encriptador.o Matriz.o Md5.o

EXEC = TPDatos

all: tpdatos

tpdatos: main.o $(OBJECTS)
	g++ -o $(EXEC) main.o $(OBJECTS)
main.o: main.cpp $(MENUES).h $(SISTEMA).h $(CARGAR_ARCHIVO).h
	g++ -c main.cpp $(flags)

menues.o: $(MENUES).cpp $(MENUES).h $(MENU).h $(FORMULARIO).h $(SISTEMA).h
	g++ -c $(MENUES).cpp $(flags)
Menu.o: $(MENU).cpp $(MENU).h $(UTILITARIOS).h
	g++ -c $(MENU).cpp $(flags)
Formulario.o: $(FORMULARIO).cpp $(FORMULARIO).h $(UTILITARIOS).h
	g++ -c $(FORMULARIO).cpp $(flags)

Cargar_Archivo.o: $(CARGAR_ARCHIVO).cpp $(CARGAR_ARCHIVO).h $(UTILITARIOS).h $(SISTEMA).h  
	g++ -c $(CARGAR_ARCHIVO).cpp $(flags)
	
DEPS_SISTEMA = $(USUARIO).h $(SERVICIO).h $(CONSULTA).h $(CATEGORIA).h $(COTIZACION).h
DEPS_SISTEMA += $(CARGAR_ARCHIVO).h $(HASHMANAGER).h $(ARBOLBMAS).h $(LISTA_INV).h
DEPS_SISTEMA += $(ENCRIPTADOR).h

Sistema.o: $(SISTEMA).cpp $(SISTEMA).h $(DEPS_SISTEMA)
	g++ -c $(SISTEMA).cpp $(flags)
Usuario.o: $(USUARIO).cpp $(USUARIO).h $(REGISTRO).h
	g++ -c $(USUARIO).cpp $(flags)
Servicio.o: $(SERVICIO).cpp $(SERVICIO).h $(REGISTRO).h $(CATEGORIA).h 
	g++ -c $(SERVICIO).cpp $(flags)
Consulta.o: $(CONSULTA).cpp $(CONSULTA).h $(REGISTRO).h 
	g++ -c $(CONSULTA).cpp $(flags)
Categoria.o: $(CATEGORIA).cpp $(CATEGORIA).h $(REGISTRO).h
	g++ -c $(CATEGORIA).cpp $(flags)
Cotizacion.o: $(COTIZACION).cpp $(COTIZACION).h $(REGISTRO).h $(CONSULTA).h
	g++ -c $(COTIZACION).cpp $(flags)
	
DEPS_ARBOL = $(CLAVE).h $(REGISTROARBOL).h $(CADENABYTES).h 
DEPS_ARBOL += $(NODOINTERIOR).h $(NODOHOJA).h $(ITERADORARBOLBMAS).h $(RESULTADO).h
DEPS_ARBOL += $(PERSISTOR).h $(CONSTANTESCOMUNES).h $(COMPARADORCLAVESCONTEXTO).h

ArbolBMas.o: $(ARBOLBMAS).cpp $(ARBOLBMAS).h $(DEPS_ARBOL)
	g++ -c $(ARBOLBMAS).cpp $(flags)
RegistroArbol.o: $(REGISTROARBOL).cpp $(REGISTROARBOL).h $(CONSTANTESCOMUNES).h $(CLAVE).h $(SERIALIZABLE).h $(CADENABYTES).h $(UTILITARIOS).h
	g++ -c $(REGISTROARBOL).cpp $(flags)
CadenaBytes.o: $(CADENABYTES).cpp $(CADENABYTES).h
	g++ -c $(CADENABYTES).cpp $(flags)
Clave.o: $(CLAVE).cpp $(CLAVE).h $(SERIALIZABLE).h $(CADENABYTES).h $(UTILITARIOS).h $(CONSTANTESCOMUNES).h
	g++ -c $(CLAVE).cpp $(flags)
Nodo.o: $(NODO).cpp $(NODO).h
	g++ -c $(NODO).cpp $(flags)
Resultado.o: $(RESULTADO).cpp $(RESULTADO).h $(CLAVE).h
	g++ -c $(RESULTADO).cpp $(flags)
IteradorArbolBMas.o: $(ITERADORARBOLBMAS).cpp $(ITERADORARBOLBMAS).h $(NODOHOJA).h $(REGISTROARBOL).h $(PERSISTOR).h  
	g++ -c $(ITERADORARBOLBMAS).cpp $(flags)
Persistor.o: $(PERSISTOR).cpp $(PERSISTOR).h $(CONSTANTESCOMUNES).h $(CADENABYTES).h  
	g++ -c $(PERSISTOR).cpp $(flags)
NodoHoja.o: $(NODOHOJA).cpp $(NODOHOJA).h $(CADENABYTES).h
	g++ -c $(NODOHOJA).cpp $(flags)
ComparadorClavesContexto.o: $(COMPARADORCLAVESCONTEXTO).h $(COMPARADORCLAVESCONTEXTO).cpp $(CLAVE).h
	g++ -c $(COMPARADORCLAVESCONTEXTO).cpp $(flags)
NodoInterior.o: $(NODOINTERIOR).cpp $(NODOINTERIOR).h
	g++ -c $(NODOINTERIOR).cpp $(flags)
	
HashManager.o: $(HASHMANAGER).cpp $(HASHMANAGER).h $(HASHTABLE).h $(ARCHIVODEBLOQUES).h
	g++ -c $(HASHMANAGER).cpp $(flags)
HashTable.o: $(HASHTABLE).cpp $(HASHTABLE).h $(BLOCKEDFILE).h
	g++ -c $(HASHTABLE).cpp $(flags)
		
ListaInvertida.o: $(LISTA_INV).cpp $(LISTA_INV).h $(ARBOLBMAS).h
	g++ -c $(LISTA_INV).cpp $(flags)
		
Registro.o: $(REGISTRO).cpp $(REGISTRO).h
	g++ -c $(REGISTRO).cpp $(flags)
Bloque.o: $(BLOQUE).cpp $(BLOQUE).h $(REGISTRO).h
	g++ -c $(BLOQUE).cpp $(flags)
ArchivoDeBloques.o: $(ARCHIVODEBLOQUES).cpp $(ARCHIVODEBLOQUES).h $(BLOCKEDFILE).h $(BLOQUE).h $(LISTAENLAZADA).h
	g++ -c $(ARCHIVODEBLOQUES).cpp $(flags)
BlockedFile.o: $(BLOCKEDFILE).cpp $(BLOCKEDFILE).h
	g++ -c $(BLOCKEDFILE).cpp $(flags)
ListaEnlazada.o: $(LISTAENLAZADA).cpp $(LISTAENLAZADA).h
	g++ -c $(LISTAENLAZADA).cpp $(flags)
	
Utilitarios.o: $(UTILITARIOS).cpp $(UTILITARIOS).h
	g++ -c $(UTILITARIOS).cpp $(flags)

Encriptador.o: $(ENCRIPTADOR).cpp $(ENCRIPTADOR).h $(UTILITARIOS).h $(MATRIZ).h $(MD5).h
	g++ -c $(ENCRIPTADOR).cpp $(flags)
Matriz.o: $(MATRIZ).cpp $(MATRIZ).h
	g++ -c $(MATRIZ).cpp $(flags)
Md5.o: $(MD5).cpp $(MD5).h
	g++ -c $(MD5).cpp $(flags)

.PHONY: clean
clean:
	rm $(EXEC) *.o *.d
